atspiroot: Implement GetChildren
authorMatthias Clasen <mclasen@redhat.com>
Fri, 9 Oct 2020 22:33:28 +0000 (18:33 -0400)
committerEmmanuele Bassi <ebassi@gnome.org>
Mon, 12 Oct 2020 15:19:32 +0000 (16:19 +0100)
No surprises here.

gtk/a11y/gtkatspiroot.c

index e8f7ef881709798283f40dcf41e675cb62bd791e..98ba152267bcffc9934444cab8daff00fa6d0ec9 100644 (file)
@@ -302,6 +302,29 @@ handle_accessible_method (GDBusConnection       *connection,
 
       g_dbus_method_invocation_return_value (invocation, g_variant_new ("((so))", name, path));
     }
+  else if (g_strcmp0 (method_name, "GetChildren") == 0)
+    {
+      GVariantBuilder builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("a(so)"));
+
+      guint n_toplevels = g_list_model_get_n_items (self->toplevels);
+      for (guint i = 0; i < n_toplevels; i++)
+        {
+          GtkWidget *window = g_list_model_get_item (self->toplevels, i);
+
+          g_object_unref (window);
+
+          if (!gtk_widget_get_visible (window))
+            continue;
+
+          GtkATContext *context = gtk_accessible_get_at_context (GTK_ACCESSIBLE (window));
+          const char *name = g_dbus_connection_get_unique_name (self->connection);
+          const char *path = gtk_at_spi_context_get_context_path (GTK_AT_SPI_CONTEXT (context));
+
+          g_variant_builder_add (&builder, "(so)", name, path);
+        }
+
+      g_dbus_method_invocation_return_value (invocation, g_variant_new ("(a(so))", &builder));
+    }
 }
 
 static GVariant *